' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2023.12.16.16.28]) on 2024.05.19 at 20:57 (Coordinated Universal Time)
' This program by Charlie Veniot
' to test the DRAW statement and recursive subroutines.
' The program is in an endless loop, pausing for about 5 seconds before clearing the screen and drawing a new flower.
' On each loop, new random colours are chosen for each of the flower's six layers of petals.
' On each loop, the flower is drawn at a random degree of rotation.
' Note that when the flower is drawn at an angle other than zero, the low resolution imperfections become very noticeable.
'
' Inspired by Richard Russell's "Flower-like tesselation" BBC BASIC program
m% = 178
SCREEN _NEWIMAGE(m% * 2,m% * 2,17)
DIM c%(1 TO 6), ainc%, astart%, aend%
DECLARE SUB Group1(x%,y%,a%,i%)
DECLARE SUB Group2(x%,y%,a%,i%)
DECLARE SUB Group3a(x%,y%,a%,i%)
DECLARE SUB Group3b(x%,y%,a%,i%)
DECLARE SUB Group4a(x%,y%,a%,i%)
DECLARE SUB Group4b(x%,y%,a%,i%)
DECLARE SUB Group4c(x%,y%,a%,i%)
DECLARE SUB Group5a(x%,y%,a%,i%)
DECLARE SUB Group5b(x%,y%,a%,i%)
DECLARE SUB Shape1(x%,y%,a%,c%)
DECLARE SUB Shape2(x%,y%,a%,c%)
DECLARE SUB Shape3(x%,y%,a%,c%)
DO
c%(6) = INT(RND*63) + 1
c%(5) = INT(RND*63) + 1
c%(4) = INT(RND*63) + 1
c%(3) = INT(RND*63) + 1
c%(2) = INT(RND*63) + 1
c%(1) = INT(RND*63) + 1
ainc% = INT(RND*45)
COLOR 0, 63
CLS
astart% = 0 + ainc% : aend% = 360 + ainc%
FOR a% = astart% TO aend% STEP 45
CALL Group1((m%+4),(m%+4),(a%),1)
NEXT a%
SLEEP 5
LOOP
SUB Group1(x%,y%,a%,i%)
DIM px%, py%
DRAW "B M" + x% + "," + y%
CALL Shape1((x%),(y%),(a%),c%(i%))
DRAW "TA" + a% + " Z10 U10"
IF i% <= 5 THEN
px% = POINT(0) : py% = POINT(1)
CALL Group1((px%),(py%),(a%),(i% + 1))
DRAW "B M" + px% + "," + py%
END IF
DRAW "TA" + a% + " U10 W10 X10"
IF i% > 1 AND i% <= 9 THEN
px% = POINT(0) : py% = POINT(1)
CALL Group2((px%),(py%),(a%),(i% + 1))
DRAW "B M" + px% + "," + py%
END IF
DRAW "TA" + a% + " D10"
END SUB
SUB Group2(x%,y%,a%,i%)
DIM px%, py%
CALL Shape3((x%),(y%),(a%),c%(i%-1))
DRAW "TA" + a% + " W10 U10 X10"
IF i% = 4 THEN
px% = POINT(0) : py% = POINT(1)
CALL Group3a((px%),(py%),(a%),(i%))
DRAW "B M" + px% + "," + py%
END IF
IF i% >= 5 THEN
px% = POINT(0) : py% = POINT(1)
CALL Group3b((px%),(py%),(a%),(i%))
DRAW "B M" + px% + "," + py%
END IF
DRAW "TA" + a% + "D10"
END SUB
SUB Group3a(x%,y%,a%,i%)
DIM px%, py%
CALL Shape2((x%),(y%),(a%),c%(3))
DRAW "TA" + a% + "W10 X10 D10"
END SUB
SUB Group3b(x%,y%,a%,i%)
DIM px%, py%
CALL Shape3((x%),(y%),(a%),c%(i%-1))
DRAW "TA" + a% + " W10 U10 X10"
IF i% = 5 THEN
DRAW "TA" + a% + " D10"
px% = POINT(0) : py% = POINT(1)
CALL Group4a((px%),(py%),(a%),(i%))
DRAW "B M" + px% + "," + py%
DRAW "TA" + a% + "D10"
ELSEIF i% = 6 THEN
px% = POINT(0) : py% = POINT(1)
CALL Group4b((px%),(py%),(a%),(i%))
DRAW "B M" + px% + "," + py%
DRAW "TA" + a% + "D20"
ELSE
px% = POINT(0) : py% = POINT(1)
CALL Group4c((px%),(py%),(a%),(i%))
DRAW "B M" + px% + "," + py%
DRAW "TA" + a% + "D10"
END IF
END SUB
SUB Group4a(x%,y%,a%,i%)
CALL Shape2((x%),(y%),(a%),c%(4))
DRAW "TA" + a% + " W10 X10 D10"
END SUB
SUB Group4b(x%,y%,a%,i%)
DIM px%, py%
CALL Shape2((x%),(y%),(a%),c%(5))
DRAW "TA" + a% + " W10 X10 D10"
px% = POINT(0) : py% = POINT(1)
CALL Group5a((px%),(py%),(a%),(i%))
DRAW "B M" + px% + "," + py%
DRAW "TA" + a% + " D10"
END SUB
SUB Group4c(x%,y%,a%,i%)
DIM px%, py%
CALL Shape3((x%),(y%),(a%),c%(i%-1))
DRAW "TA" + a% + " W10 U10 X10 D10"
px% = POINT(0) : py% = POINT(1)
CALL Group5B((px%),(py%),(a%),(i%))
DRAW "B M" + px% + "," + py%
DRAW "TA" + a% + " D10"
END SUB
SUB Group5a(x%,y%,a%,i%)
CALL Shape2((x%),(y%),(a%),c%(5))
DRAW "TA" + a% + " W10 X10 D10"
END SUB
SUB Group5b(x%,y%,a%,i%)
DIM px%, py%
CALL Shape2((x%),(y%),(a%),c%(6))
DRAW "TA" + a% + " W10 X10 D10"
px% = POINT(0) : py% = POINT(1)
CALL Shape2((px%),(py%),(a%),c%(6))
DRAW "B M" + px% + "," + py%
END SUB
SUB Shape1(x%,y%,a%,c%)
DRAW "TA" + a% + " Z10 U20 W10 X10 D10 Y10 D10"
DRAW "B TA" + a% + " U15"
PAINT (POINT(0),POINT(1)),c%,0
DRAW "B M" + x% + "," + y%
SLEEP 0.025
END SUB
SUB Shape2(x%,y%,a%,c%)
DRAW "TA" + a% + " W10 X10 D20 Y10 U10 Z10 U10"
DRAW "B TA" + a% + " R5"
PAINT (POINT(0),POINT(1)),c%,0
DRAW "B M" + x% + "," + y%
SLEEP 0.025
END SUB
SUB Shape3(x%,y%,a%,c%)
DRAW "TA" + a% + " W10 U10 X10 D20 Y10 Z10 U10"
DRAW "B TA" + a% + " R5"
PAINT (POINT(0),POINT(1)),c%,0
DRAW "B M" + x% + "," + y%
SLEEP 0.025
END SUB